iT邦幫忙

2021 iThome 鐵人賽

DAY 13
0
永豐金融APIs

30天全端挑戰!React+Spring Boot+Mongo DB 串接永豐API 打造金融網站系列 第 13

[Day 13] - 初探永豐銀行線上收款API - 豐收款 - 取得Nonce

  • 分享至 

  • xImage
  •  

取得Nonce

根據規格書的說明,每次呼叫api前都要先取得Nonce

https://ithelp.ithome.com.tw/upload/images/20210927/20128973vAyE4ogwQO.png

要取得Nonce也滿簡單的,就是以POST方法傳送你的ShopNo(當初報名取得api後有另外寄信提供)
https://ithelp.ithome.com.tw/upload/images/20210927/201289735tqODh9ocp.png

程式的部分我想要以OkHttp來進行連線

加dependcy

		<dependency>
    		<groupId>com.squareup.okhttp3</groupId>
    		<artifactId>okhttp</artifactId>
    		<version>4.9.0</version>
		</dependency>	

之前用的都是apache的Httpclient,這次來用用看OkHttp

建立一個HttpUtil的工具類別

import java.io.IOException;

import okhttp3.MediaType;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;

public class HttpUtil {
    
    public static final MediaType JSON
    = MediaType.get("application/json; charset=utf-8");

	OkHttpClient client = new OkHttpClient();

	String post(String url, String json) throws IOException {
	  RequestBody body = RequestBody.create(json,JSON);
	  Request request = new Request.Builder()
		  .url(url)
		  .post(body)
		  .build();
	  try (Response response = client.newCall(request).execute()) {
		return response.body().string();
	  }
	}
}

先建一個post的方法,其他要用到什麼可以之後再補
參考來源okhttp的範例

接著在我的專案的Application.java

加入以下bean做個小測試

@Bean
CommandLineRunner runner(UserRepo userDao){
    return args -> {

        HttpUtil util = new HttpUtil();
        Map<String,String> map = new HashMap<String,String>();
        map.put("ShopNo", "BA0026_001");
        String json =new ObjectMapper().writeValueAsString(map);

        String res=util.post("https://sandbox.sinopac.com/QPay.WebAPI/api/Nonce", json);
        System.out.println(res);

    };
}

執行時遇到了
PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target的錯誤,也是java開發者常常遇到的Exception

https://ithelp.ithome.com.tw/upload/images/20210929/20128973SFrtNJ3dtU.png

這是因為我們的jdk的憑證庫沒有匯入這個我們要連線的網址的憑證,導致連線失敗
解決方法也很簡單,用chrome連線,點鎖頭下載.der格式的憑證
https://ithelp.ithome.com.tw/upload/images/20210929/20128973Y7lmVvYQEX.png
只要把憑證匯入jdk中的憑證庫就行了
在測試環境我會直接以root憑證匯入,一來時效較長、二來只要是由同個機構簽發憑證的網站就也不用再重匯,比較方便

在你目前使用的jdk的bin會有個keytool,
以cmd下指令:

D:\java\jdk-11.0.11\bin>keytool -importcert -file C:\Users\user\Downloads\twca.cer -keystore D:\java\jdk-11.0.11\lib\security/cacerts -alias TWCA_ROOT

輸入密碼(預設是changeit)後按y確認

https://ithelp.ithome.com.tw/upload/images/20210929/20128973koTGe8yuOw.png
就完成了

再試一次就成功囉
https://ithelp.ithome.com.tw/upload/images/20210929/20128973oAWJPmwcAl.png

程式實作的部分我合併寫在
[Day 15] - 初探永豐銀行線上收款API - 豐收款 - HASH ID計算(2) +IV計算


上一篇
[Day 12] - 初探永豐銀行線上收款API - 豐收款
下一篇
[Day 14] - 初探永豐銀行線上收款API - 豐收款 - HASH ID計算(1)
系列文
30天全端挑戰!React+Spring Boot+Mongo DB 串接永豐API 打造金融網站30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言